/**
 * @file blankgamewidget.h
 * @brief 空白游戏页面组件头文件
 *
 * BlankGameWidget为游戏认证完成后提供一个过渡页面，
 * 显示加载状态和欢迎信息，直到具体的游戏组件完全加载完成。
 */

#ifndef BLANKGAMEWIDGET_H
#define BLANKGAMEWIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QProgressBar>
#include <QTimer>
#include <QStackedWidget>
#include <QPushButton>
#include <QTextEdit>
#include <QPropertyAnimation>
#include <QGraphicsOpacityEffect>

/**
 * @class BlankGameWidget
 * @brief 空白游戏页面组件
 *
 * 提供游戏加入后的过渡页面，包括：
 * - 加载动画和进度显示
 * - 游戏基本信息展示
 * - 用户欢迎信息
 * - 平滑的页面切换效果
 */
class BlankGameWidget : public QWidget
{
    Q_OBJECT

public:
    /**
     * @brief 页面状态枚举
     */
    enum PageState {
        LoadingState,      ///< 加载状态
        WelcomeState,      ///< 欢迎状态
        ReadyState         ///< 准备完成状态
    };

    explicit BlankGameWidget(QWidget *parent = nullptr);
    ~BlankGameWidget();

    // === 页面控制方法 ===
    /**
     * @brief 显示游戏页面
     * @param gameType 游戏类型
     * @param serverName 服务器名称
     * @param playerName 玩家名称
     */
    void showGamePage(const QString &gameType, const QString &serverName, const QString &playerName);

    /**
     * @brief 隐藏游戏页面
     */
    void hideGamePage();

    /**
     * @brief 设置页面状态
     * @param state 页面状态
     */
    void setPageState(PageState state);

    /**
     * @brief 更新加载进度
     * @param progress 进度值 (0-100)
     * @param message 进度消息
     */
    void updateLoadingProgress(int progress, const QString &message);

    /**
     * @brief 应用统一主题
     */
    void applyUnifiedTheme();

signals:
    /**
     * @brief 返回主页面信号
     */
    void backToMainPage();

    /**
     * @brief 页面准备完成信号
     */
    void pageReady();

private slots:
    /**
     * @brief 加载动画定时器槽
     */
    void onLoadingAnimation();

    /**
     * @brief 返回按钮点击槽
     */
    void onBackButtonClicked();

private:
    // === UI组件 ===
    QVBoxLayout *m_mainLayout;              ///< 主布局
    QStackedWidget *m_stackedWidget;        ///< 堆叠窗口

    // 加载页面组件
    QWidget *m_loadingPage;                 ///< 加载页面
    QLabel *m_loadingIconLabel;             ///< 加载图标
    QLabel *m_loadingTitleLabel;            ///< 加载标题
    QProgressBar *m_loadingProgressBar;     ///< 加载进度条
    QLabel *m_loadingMessageLabel;          ///< 加载消息

    // 欢迎页面组件
    QWidget *m_welcomePage;                 ///< 欢迎页面
    QLabel *m_welcomeTitleLabel;            ///< 欢迎标题
    QLabel *m_gameInfoLabel;                ///< 游戏信息
    QTextEdit *m_gameDescriptionEdit;       ///< 游戏描述
    QPushButton *m_readyButton;             ///< 准备就绪按钮
    QPushButton *m_backButton;              ///< 返回按钮

    // === 动画组件 ===
    QTimer *m_loadingAnimationTimer;        ///< 加载动画定时器
    QPropertyAnimation *m_fadeAnimation;    ///< 淡入淡出动画
    QGraphicsOpacityEffect *m_opacityEffect; ///< 透明度效果

    // === 状态变量 ===
    PageState m_currentState;               ///< 当前页面状态
    QString m_gameType;                     ///< 游戏类型
    QString m_serverName;                   ///< 服务器名称
    QString m_playerName;                   ///< 玩家名称
    int m_loadingProgress;                  ///< 加载进度
    int m_animationFrame;                   ///< 动画帧数

    // === 主题颜色 ===
    QString m_primaryColor;                 ///< 主色调
    QString m_backgroundColor;              ///< 背景色
    QString m_textColor;                    ///< 文字色
    QString m_successColor;                 ///< 成功色

    // === 私有方法 ===
    /**
     * @brief 设置UI界面
     */
    void setupUI();

    /**
     * @brief 设置加载页面
     */
    void setupLoadingPage();

    /**
     * @brief 设置欢迎页面
     */
    void setupWelcomePage();

    /**
     * @brief 设置连接
     */
    void setupConnections();

    /**
     * @brief 开始加载动画
     */
    void startLoadingAnimation();

    /**
     * @brief 停止加载动画
     */
    void stopLoadingAnimation();

    /**
     * @brief 获取游戏类型图标
     * @param gameType 游戏类型
     * @return 图标文本
     */
    QString getGameTypeIcon(const QString &gameType) const;

    /**
     * @brief 获取游戏描述
     * @param gameType 游戏类型
     * @return 游戏描述文本
     */
    QString getGameDescription(const QString &gameType) const;
};

#endif // BLANKGAMEWIDGET_H

